@property avaa edistyneitä CSS-ominaisuuksia, mahdollistaa CSS-ominaisuuksien rekisteröinnin ja mukauttamisen. Opi hyödyntämään sitä parempaan tyyliin ja animaatioiden hallintaan.
CSS:n hallinta: Mukautettujen ominaisuuksien rekisteröinti @property-säännöllä
Mukautetut ominaisuudet (tunnetaan myös CSS-muuttujina) ovat mullistaneet tavan, jolla kirjoitamme ja ylläpidämme CSS:ää. Ne mahdollistavat uudelleenkäytettävien arvojen määrittelyn, tehden tyylitiedostoistamme joustavampia ja ylläpidettävämpiä. Mutta entä jos voisit mennä pelkkää arvojen määrittelyä pidemmälle? Entä jos voisit määrittää mukautetun ominaisuuden sisältämän arvon tyypin, sen alkuarvon ja periytyvyyskäyttäytymisen? Tässä kohtaa @property astuu kuvaan.
Mitä @property on?
@property on CSS-sääntö, joka mahdollistaa mukautetun ominaisuuden eksplisiittisen rekisteröinnin selaimelle. Tämä rekisteröintiprosessi antaa selaimelle tietoa ominaisuuden odotetusta tyypistä, sen alkuarvosta ja siitä, periikö se arvonsa yläelementiltään. Tämä avaa useita edistyneitä ominaisuuksia, kuten:
- Tyypintarkistus: Varmistaa, että mukautetulle ominaisuudelle annetaan oikeantyyppinen arvo.
- Animaatio: Mahdollistaa pehmeät siirtymät ja animaatiot tietyntyyppisille mukautetuille ominaisuuksille, kuten numeroille tai väreille.
- Oletusarvot: Tarjoaa varoarvon, jos mukautettua ominaisuutta ei ole erikseen määritelty.
- Perinnän hallinta: Määrittää, periikö mukautettu ominaisuus arvonsa yläelementiltään.
Ajattele sitä tyyppiturvallisuuden lisäämisenä CSS-muuttujiisi. Se mahdollistaa vankempien ja ennustettavampien tyylitiedostojen luomisen.
@property-säännön syntaksi
The @property rule follows this basic syntax:
@property --property-name {
syntax: '<value-syntax>';
inherits: true | false;
initial-value: <value>;
}
Käydään läpi kukin osa:
--property-name: Rekisteröitävän mukautetun ominaisuuden nimi. Sen on alettava kahdella tavuviivalla (--).syntax: Määrittää ominaisuuden odotetun arvon tyypin. Tämä on ratkaisevan tärkeää tyypintarkistuksen ja animaation kannalta. Tutustumme käytettävissä oleviin syntaksiarvoihin yksityiskohtaisesti alla.inherits: Totuusarvo, joka osoittaa, periikö ominaisuus arvonsa yläelementiltään. Oletuksenafalse, jos sitä ei ole määritelty.initial-value: Ominaisuuden oletusarvo, jos sitä ei ole eksplisiittisesti asetettu elementtiin. Tämä varmistaa, että varoarvo on aina käytettävissä.
syntax-kuvaimen ymmärtäminen
syntax-kuvaimessa on @property-säännön tärkein osa. Se kertoo selaimelle, minkälaista arvoa mukautetulle ominaisuudelle odotetaan. Tässä on joitakin yleisiä syntaksiarvoja:
*: Sallii minkä tahansa arvon. Tämä on sallivin syntaksi ja vastaa pohjimmiltaan tavallisen CSS-muuttujan käyttäytymistä ilman rekisteröintiä. Käytä tätä säästeliäästi.<length>: Odottaa pituusarvoa (esim.10px,2em,50%). Tämä mahdollistaa pehmeät animaatiot eri pituusarvojen välillä.<number>: Odottaa numeerista arvoa (esim.1,3.14,-5). Hyödyllinen numeeristen ominaisuuksien, kuten peittävyyden tai skaalan, animoinnissa.<percentage>: Odottaa prosenttiarvoa (esim.25%,100%).<color>: Odottaa väriarvoa (esim.#f00,rgb(255, 0, 0),hsl(0, 100%, 50%)). Mahdollistaa pehmeät värisiirtymät ja animaatiot.<image>: Odottaa kuvatiedostoa (esim.url(image.jpg),linear-gradient(...)).<integer>: Odottaa kokonaislukuarvoa (esim.1,-10,0).<angle>: Odottaa kulma-arvoa (esim.45deg,0.5rad,200grad). Hyödyllinen pyöritysten animoinnissa.<time>: Odottaa aika-arvoa (esim.1s,500ms). Hyödyllinen animaatioiden kestojen tai viiveiden hallinnassa mukautettujen ominaisuuksien avulla.<resolution>: Odottaa tarkkuusarvoa (esim.300dpi,96dpi).<transform-list>: Odottaa luetteloa transform-funktioista (esim.translateX(10px) rotate(45deg)). Mahdollistaa monimutkaisten transformaatioiden animoinnin.<custom-ident>: Odottaa mukautettua tunnistetta (merkkijono). Samankaltainen kuinenum.<string>: Odottaa merkkijonoarvoa (esim."Hello World"). Ole varovainen tämän kanssa, sillä merkkijonojen animointia ei yleensä tueta.- Mukautetut syntaksit: Voit luoda monimutkaisempia syntakseja yhdistelemällä edellä mainittuja sekä
|(tai),[](ryhmittely),+(yksi tai useampi),*(nolla tai useampi) ja?(nolla tai yksi) operaattoreita. Esimerkiksi:<length> | <percentage>sallii joko pituus- tai prosenttiarvon.
Oikean syntax-arvon valitseminen on välttämätöntä @property-säännön täyden tehon hyödyntämiseksi.
Käytännön esimerkkejä @property-säännöstä
Katsotaanpa joitakin käytännön esimerkkejä @property-säännön käytöstä CSS:ssäsi.
Esimerkki 1: Taustavärin animointi
Oletetaan, että haluat animoida painikkeen taustavärin. Voit käyttää @property-sääntöä rekisteröidäksesi mukautetun ominaisuuden taustavärille ja animoidaksesi sitä sitten CSS-siirtymillä.
@property --bg-color {
syntax: '<color>';
inherits: false;
initial-value: #fff;
}
.button {
background-color: var(--bg-color);
transition: --bg-color 0.3s ease;
}
.button:hover {
--bg-color: #f00; /* Red */
}
Tässä esimerkissä rekisteröimme mukautetun ominaisuuden --bg-color <color>-syntaksilla, mikä tarkoittaa, että se odottaa väriarvoa. initial-value on asetettu valkoiseksi (#fff). Kun painiketta hiiren osoittimella osoitetaan, --bg-color muuttuu punaiseksi (#f00), ja siirtymä animoi taustavärin muutoksen sujuvasti.
Esimerkki 2: Reunuksen säteen hallinta numerolla
Voit käyttää @property-sääntöä elementin reunuksen säteen hallintaan ja sen animointiin.
@property --border-radius {
syntax: '<length>';
inherits: false;
initial-value: 0px;
}
.rounded-box {
border-radius: var(--border-radius);
transition: --border-radius 0.5s ease;
}
.rounded-box:hover {
--border-radius: 20px;
}
Tässä rekisteröimme --border-radius-ominaisuuden <length>-tyyppinä, varmistaen, että se hyväksyy pituusarvot, kuten px, em tai %. Alkuarvo on 0px. Kun hiiri viedään .rounded-box-elementin päälle, reunuksen säde animoituu 20px:iin.
Esimerkki 3: Varjon siirron animointi
Oletetaan, että haluat animoida laatikon varjon vaakasuuntaista siirtoa.
@property --shadow-offset-x {
syntax: '<length>';
inherits: false;
initial-value: 0px;
}
.shadowed-box {
box-shadow: var(--shadow-offset-x) 5px 10px rgba(0, 0, 0, 0.5);
transition: --shadow-offset-x 0.3s ease;
}
.shadowed-box:hover {
--shadow-offset-x: 10px;
}
Tässä tapauksessa --shadow-offset-x on rekisteröity <length>-tyyppinä, ja sen alkuarvo on 0px. box-shadow-ominaisuus käyttää tätä mukautettua ominaisuutta vaakasuuntaiseen siirtoonsa. Hiiren osoittimella osoitettaessa siirto animoituu 10px:iin.
Esimerkki 4: <custom-ident>-syntaksin käyttö teemoituksessa
<custom-ident>-syntaksi mahdollistaa ennalta määriteltyjen merkkijonoarvojen joukon määrittelyn, luoden tehokkaasti enumin CSS-muuttujillesi. Tämä on hyödyllistä teemoituksessa tai erillisten tilojen hallinnassa.
@property --theme {
syntax: '<custom-ident>';
inherits: true;
initial-value: light;
}
:root {
--theme: light; /* Default Theme */
}
body {
background-color: var(--theme) == light ? #fff : #333;
color: var(--theme) == light ? #000 : #fff;
}
.dark-theme {
--theme: dark;
}
Tässä --theme on rekisteröity <custom-ident>-syntaksilla. Vaikka emme eksplisiittisesti luettele sallittuja tunnisteita itse @property-säännössä, koodi viittaa siihen, että ne ovat light ja dark. CSS käyttää sitten ehdollista logiikkaa (var(--theme) == light ? ... : ...) eri tyylien soveltamiseksi nykyisen teeman perusteella. Luokan dark-theme lisääminen elementtiin vaihtaa teeman tummaksi. Huomaa, että ehdollinen logiikka var()-funktion kanssa ei ole standardi-CSS:ää ja vaatii usein esikäsittelyohjelmia tai JavaScriptiä. Standardimaisempi lähestymistapa käyttäisi CSS-luokkia ja kaskadointia:
@property --theme {
syntax: '<custom-ident>';
inherits: true;
initial-value: light;
}
:root {
--theme: light;
}
body {
background-color: #fff;
color: #000;
}
body[data-theme="dark"] {
background-color: #333;
color: #fff;
}
/* JavaScript to toggle the theme */
/* document.body.setAttribute('data-theme', 'dark'); */
Tässä uudistetussa esimerkissä käytämme data-theme-attribuuttia body-elementissä teeman hallintaan. JavaScriptiä (kommentoitu pois) käytettäisiin attribuutin vaihtamiseen light:n ja dark:n välillä. Tämä on vankempi ja standardimaisempi lähestymistapa teemoitukseen CSS-muuttujien avulla.
@property-säännön käytön edut
@property-säännön käyttö tarjoaa useita etuja:
- Parempi koodin luettavuus ja ylläpidettävyys: Määrittelemällä eksplisiittisesti mukautetun ominaisuuden odotetun arvon tyypin teet koodistasi ymmärrettävämmän ja vähemmän virhealtin.
- Parannetut animaatiokyvyt:
@propertymahdollistaa pehmeät siirtymät ja animaatiot mukautetuille ominaisuuksille, mikä avaa uusia mahdollisuuksia luoda dynaamisia ja mukaansatempaavia käyttöliittymiä. - Parempi suorituskyky: Selaimet voivat optimoida rekisteröityjä mukautettuja ominaisuuksia käyttävien elementtien renderöinnin, mikä parantaa suorituskykyä.
- Tyyppiturvallisuus: Selain tarkistaa, että määritetty arvo vastaa ilmoitettua syntaksia, mikä estää odottamattoman käyttäytymisen ja helpottaa virheenkorjausta. Tämä on erityisen hyödyllistä suurissa projekteissa, joissa monet kehittäjät osallistuvat koodikannan kehitykseen.
- Oletusarvot: Varmistamalla, että mukautetulla ominaisuudella on aina kelvollinen arvo, vaikka sitä ei ole eksplisiittisesti asetettu, estää virheitä ja parantaa CSS:n kestävyyttä.
Selaimen yhteensopivuus
Vuoden 2023 lopussa @property-säännöllä on hyvä, mutta ei universaali, selaintuki. Se on tuettu useimmissa moderneissa selaimissa, mukaan lukien Chrome, Firefox, Safari ja Edge. Vanhemmat selaimet eivät kuitenkaan välttämättä tue sitä. Tarkista aina ajantasaiset selaimen yhteensopivuustiedot sivustoilta, kuten Can I use..., ennen kuin käytät @property-sääntöä tuotantoympäristössä.
Vanhempien selaimien käsittelyyn voit käyttää ominaiskyselyitä (@supports) tarjotaksesi varatyylejä:
@supports (--property: value) {
/* Tyylit, jotka käyttävät @property-sääntöä */
}
@supports not (--property: value) {
/* Varatyylit selaimille, jotka eivät tue @property-sääntöä */
}
Korvaa --property ja value todellisella mukautetulla ominaisuudella ja sen arvolla.
Milloin käyttää @property-sääntöä
Harkitse @property-säännön käyttöä seuraavissa tilanteissa:
- Kun sinun on animoitava mukautettuja ominaisuuksia: Tämä on
@property-säännön ensisijainen käyttötapaus. Ominaisuuden rekisteröinti oikealla syntaksilla mahdollistaa pehmeät animaatiot. - Kun haluat pakottaa tyyppiturvallisuuden mukautetuille ominaisuuksille: Jos haluat varmistaa, että mukautettu ominaisuus sisältää aina tietyn tyyppisen arvon, käytä
@property-sääntöä sen rekisteröimiseen. - Kun haluat antaa oletusarvon mukautetulle ominaisuudelle:
initial-value-kuvaimen avulla voit määrittää varoarvon. - Suurissa projekteissa:
@propertyparantaa koodin ylläpidettävyyttä ja estää virheitä, tehden siitä erityisen hyödyllisen suurissa projekteissa, joissa on paljon kehittäjiä. - Kun luot uudelleenkäytettäviä komponentteja tai suunnittelujärjestelmiä:
@propertyvoi auttaa varmistamaan johdonmukaisuuden ja ennustettavuuden komponenttiesi välillä.
Yleisiä virheitä, joita kannattaa välttää
syntax-kuvaimen unohtaminen: Ilmansyntax-kuvaimetta selain ei tiedä odotettua arvon tyyppiä, eivätkä animaatiot toimi oikein.- Väärän
syntax-arvon käyttäminen: Väärän syntaksin valitseminen voi johtaa odottamattomaan käyttäytymiseen. Varmista, että valitset syntaksin, joka heijastaa tarkasti odotetun arvon tyyppiä. initial-value-arvon antamatta jättäminen: Ilman alkuarvoa mukautettu ominaisuus saattaa olla määrittelemätön, mikä johtaa virheisiin. Anna aina järkevä oletusarvo.*-syntaksin liiallinen käyttö: Vaikka kätevääkin,*-käytön avulla menettää tyypintarkistuksen ja animaation edut. Käytä sitä vain, kun todella tarvitset sallia minkä tahansa tyyppisen arvon.- Selaimen yhteensopivuuden laiminlyönti: Tarkista aina selaimen yhteensopivuus ja tarjoa varatyylejä vanhemmille selaimille.
@property ja CSS Houdini
@property on osa laajempaa API-joukkoa, nimeltään CSS Houdini. Houdini antaa kehittäjille mahdollisuuden hyödyntää selaimen renderöintimoottoria, antaen heille ennennäkemättömän kontrollin tyylittely- ja asetteluprosessiin. Muita Houdini-rajapintoja ovat:
- Paint API: Mahdollistaa mukautettujen taustakuvien ja reunusten määrittelyn.
- Animation Worklet API: Tarjoaa tavan luoda korkean suorituskyvyn animaatioita, jotka ajetaan suoraan selaimen kompositoijan säikeessä.
- Layout API: Mahdollistaa mukautettujen asettelualgoritmien määrittelyn.
- Parser API: Tarjoaa pääsyn selaimen CSS-jäsentäjään.
@property on suhteellisen yksinkertainen Houdini-rajapinta oppia, mutta se avaa oven syvemmälle ja edistyneemmille Houdini-ominaisuuksille.
Yhteenveto
@property on tehokas CSS-sääntö, joka avaa edistyneitä ominaisuuksia mukautetuille ominaisuuksille. Rekisteröimällä mukautettuja ominaisuuksia selaimelle voit varmistaa tyyppiturvallisuuden, mahdollistaa sujuvat animaatiot ja parantaa CSS-koodisi yleistä kestävyyttä. Vaikka selaintuki ei ole universaali, @property-säännön käyttö edut, erityisesti suurissa projekteissa ja suunnittelujärjestelmissä, tekevät siitä arvokkaan työkalun moderniin verkkokehitykseen. Ota @property käyttöön ja vie CSS-taitosi seuraavalle tasolle!